/** 
 * @main Plik z deklaracjami klasy GenLosowy.
 * @file    losowy.h
 * @author  Grzegorz Sejnota
 *
 * @created on 5 styczen 2009, 18:53
 * @version 0.0001
 */

#ifndef _LOSOWY_H
#define	_LOSOWY_H

#include "wielomian.h"
//#include <iosfwd>
#include <vector>    


//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++ POCZĄTEK [klasy GenLosowy] ++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/**
 * Klasa udostepniajaca metody umozliwiajace utworzenie ciagu pobudzen toru 
 * zakłócenia obiektu klasy ARMAX o zadanej wariancji wyjściowej toru zaklocenia.
 * Klasa jest singletonem.
 */
class GenLosowy{
private:
    /* konstruktor */
    GenLosowy(int);
    
    /* konstruktor kopiujacy */
    GenLosowy(const GenLosowy &);
    
    /* operator przypisania */
    GenLosowy & operator=(const GenLosowy&){};
    
    /// ciag losowy 
    std::vector<double> ciagLosowy;
    
    /// numer probki ciagu losowego
    int numerProbki;
    
public:
    /* destruktor */
    ~GenLosowy();
    
    /* metoda pozwalajaca utworzyc obiekt tej klasy*/
    static GenLosowy& pobierzInstancje();
    
    /* metoda obliczajaca wariancje ciagu*/
    static double obliczWariancje(const std::vector<double> &);
    
    /* metoda filtrujaca ciagWariancja1 przez filtr ARMA*/
    std::vector<double> filtrujArma(Wielomian, Wielomian);
    
    /* metoda filtrujaca podany ciag przez filtr ARMA*/
    static std::vector<double> filtrujArma(Wielomian, Wielomian, const std::vector<double> &);
    
    /* metoda pozwalajaca obliczyc wspłóczynnik przeskalowania ciagu generatora */
    double obliczWspPrzeskalowaniaCiagu(double, Wielomian, Wielomian);
    
    /* metoda zwracajaca wartosc jednej probki ciagu losowego */
    double pobierzLiczbeLosowa();
  
};
//------------------------------------------------------------------------------
//-------------- KONIEC [klasy GenLosowy] --------------------------------
//------------------------------------------------------------------------------

#endif	/* _LOSOWY_H */

